package com.mykt.utils.token;

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import java.util.Map;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.JWTVerifier;

/**
 * token 工具类
 */
public class TokenUtils {

    // token签名密钥
    private static final String secretKey = "TESTKEY"; // 应该是一个复杂的随机字符串

    /**
     * 生成token
     * @param userInfo
     * @return
     */
    public static String createToken(Map<String,String> userInfo) {
        try {

            //long ttlMillis = 3600000; //token失效时间设置  1小时
            //Date iat = new Date();//token创建时间
            //Date exp = new Date(iat.getTime() + ttlMillis);//token过期时间

            String token = JWT.create()
              /*      .withIssuer(userName)
                    .withSubject(userId)*/
 /*                   .withIssuedAt(iat)
                    .withExpiresAt(exp)*/
                    .withClaim("userInfo",userInfo)
                    // 添加额外的claims（如果需要）
                    // .withClaim("key", "value")
                    .sign(Algorithm.HMAC256(secretKey));

            return token;
        } catch (Exception e) {
            return null;
        }
    }


    /**
     * 解析token
     * @param token
     * @return
     */
    public static DecodedJWT parseToken(String token){
        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(secretKey)).build();
        DecodedJWT decodedJWT = jwtVerifier.verify(token);
        return decodedJWT;
    }


    /**
     * 获取token中的用户信息
     */
    public static Map<String,String> getUserInfo(String token){
        return (Map<String, String>) parseToken(token).getClaim(token);
    }


}
